home *** CD-ROM | disk | FTP | other *** search
- #ifndef _PATCHHARNESS_
- #define _PATCHHARNESS_
-
- #include <ConditionalMacros.h>
- #include <MixedMode.h>
- #include <Types.h>
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=mac68k
- #endif
-
-
- typedef pascal OSStatus (*PatchInitProcPtr)(struct PatchDesc **list);
- typedef pascal void (*PatchInstallProcPtr)(struct PatchDesc *desc,UniversalProcPtr patch);
- typedef pascal void (*PatchRemoveProcPtr)(struct PatchDesc *desc);
-
-
- #if GENERATINGCFM
- typedef UniversalProcPtr PatchInitUPP;
- typedef UniversalProcPtr PatchInstallUPP;
- typedef UniversalProcPtr PatchRemoveUPP;
- #else
- typedef PatchInitProcPtr PatchInitUPP;
- typedef PatchInstallProcPtr PatchInstallUPP;
- typedef PatchRemoveProcPtr PatchRemoveUPP;
- #endif
-
- enum {
- uppPatchInitProcInfo = kPascalStackBased
- | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct PatchDesc **))),
-
- uppPatchInstallProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct PatchDesc *)))
- | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(UniversalProcPtr))),
-
- uppPatchRemoveProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(struct PatchDesc *)))
- };
-
- #if GENERATINGCFM
- #define NewPatchInitProc(userRoutine) (PatchInitUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),uppPatchInitProcInfo,GetCurrentArchitecture())
- #define NewPatchInstallProc(userRoutine) (PatchInstallUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),uppPatchInstallProcInfo,GetCurrentArchitecture())
- #define NewPatchRemoveProc(userRoutine) (PatchRemoveUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),uppPatchRemoveProcInfo,GetCurrentArchitecture())
- #else
- #define NewPatchInitProc(userRoutine) ((PatchInitUPP)(userRoutine))
- #define NewPatchInstallProc(userRoutine) ((PatchInstallUPP)(userRoutine))
- #define NewPatchRemoveProc(userRoutine) ((PatchRemoveUPP)(userRoutine))
- #endif
-
- #if GENERATINGCFM
- #define CallPatchInitProc(userRoutine,desc) CallUniversalProc((UniversalProcPtr)(userRoutine),uppPatchInitProcInfo,(desc))
- #define CallPatchInstallProc(userRoutine,desc,patch) CallUniversalProc((UniversalProcPtr)(userRoutine),uppPatchInstallProcInfo,(desc),(patch))
- #define CallPatchRemoveProc(userRoutine,desc) CallUniversalProc((UniversalProcPtr)(userRoutine),uppPatchRemoveProcInfo,(desc))
- #else
- #define CallPatchInitProc(userRoutine,desc) (*(PatchInitProcPtr)(userRoutine))((desc))
- #define CallPatchInstallProc(userRoutine,desc,patch) (*(PatchInstallProcPtr)(userRoutine))((desc),(patch))
- #define CallPatchRemoveProc(userRoutine,desc) (*(PatchRemoveProcPtr)(userRoutine))((desc))
- #endif
-
-
- typedef struct PatchDesc
- {
- struct PatchDesc *next;
- OSType type;
- PatchInstallUPP install;
- PatchRemoveUPP remove;
- } PatchDesc;
-
-
- OSStatus InstallPatchHarness(PatchDesc **patchList);
- OSStatus InstallPatch(PatchDesc *patchList,OSType type,UniversalProcPtr patch);
- OSStatus DCRemovePatch(PatchDesc *patchList,OSType type);
-
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=reset
- #endif
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* _PATCHHARNESS_ */
-